package es.us.mwm.managers;

import es.us.mwm.entities.Users;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.Resource;
import javax.faces.event.ActionEvent;
import javax.inject.Named;
import javax.faces.view.ViewScoped;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

/**
 * CLASE GENERADA AUTOMATICAMENTE. MODIFICADA
 * @author y0rg
 */
@Named(value = "usersController")
@ViewScoped
public class UsersController extends AbstractController<Users> implements Serializable {

    //Atributo que representa el recurso del servidor para el envio de correos. 
    //Debe estar creado en el server Glassfish con lo datos de la cuenta de correo desde la que se envian
    @Resource(name = "mailSession")
    private Session mailSession;

    /**
     * Constructor basico sin parametros
     */
    public UsersController() {
        super(Users.class);
    }

    /**
     * Metodo para el envio de los emails
     * Se manda un email automaticamente al usuario que se ha dado de alta con sus datos de acceso
     */
    public void sendEmail (){
        try {
            
            Message msg = new MimeMessage(mailSession);
            msg.setSubject("Usuario servicio alertas 112");
            msg.setRecipient(RecipientType.TO, new InternetAddress(
                    this.getSelected().getEmail(), this.getSelected().getUser()));
            msg.setFrom(new InternetAddress("administracion@alertas.112", "Alertas112"));

            BodyPart messageBodyPart = new MimeBodyPart();
            messageBodyPart.setText("Le informamos que acaba de darse de alta su usuario en el servicio de alertas 112 con los siguientes datos:"
                    + "\n Usuario: " + this.getSelected().getUser()
                    + "\nContraseña: " + this.getSelected().getPassword()
                    + "\nLe recomendamos que acceda al sistema para comprobar el funcionamiento de su cuenta y que cambie la contraseña de acceso"
                    + "\nNota: Ha recibido este email automaticamente al genererse su cuenta, si cree no ser el distanatario del mismo, pongase en contacto con administracion@alertas.112. Gracias");

            Multipart multipart = new MimeMultipart();
            multipart.addBodyPart(messageBodyPart);

            msg.setContent(multipart);

            Transport.send(msg);
        } catch (MessagingException ex) {
            Logger.getLogger(UsersController.class.getName()).log(Level.SEVERE, null, ex);
        } catch (UnsupportedEncodingException ex) {
            Logger.getLogger(UsersController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    @Override
    public void saveNew(ActionEvent event) {
        this.sendEmail();
        super.saveNew(event);
    }
}
